/**
 *    类：BaseAction
 *  功能：所有Action的基类
 *  作者：张中伟
 *  时间：2009年6月23日10时7分
 *  描述：所有Action的基类，用于处理通用事务。
 */

package struts;

import hibernate.DBException;
import hibernate.PageInfo;
import hibernate.dao.BaseDAOI;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

public class BaseAction {
	private BaseDAOI baseDAO;

	/**
	 * 方法：execute 描述：所有Action入口处理 ，主要处理异常返回
	 * 
	 * @return 返回字符串
	 */
	public String execute() {
		try {
			return exe();
		} 
		catch (Exception e) {
			Exceptprocess(e);
			return null;
		}
	}

	/**
	 * 方法：Exceptprocess 描述：处理内部错误信息，并返回到页面
	 * 
	 * @param e
	 */
	public void Exceptprocess(Exception e) {
		try {
			getResponse().setContentType("text/html; charset=utf-8");

			getResponse().getWriter()
					.write(
							"{\"errors\":\"" + e.getMessage()
									+ "\",\"success\":false}");

		}catch (Exception ee) {
			
		}
	}

	/**
	 * 方法：exe
	 * 
	 * @return 描述：所有Action覆盖此方法，处理Action方法
	 */
	public String exe() {
		return "";
	}

	public void save(Object obj) throws DBException {
		baseDAO.save(obj);
	}

	// 删除
	public void delete(Object obj) throws DBException {
		baseDAO.delete(obj);
	}

	// 修改
	public Object merge(Object obj) throws DBException {
		return baseDAO.merge(obj);
	}

	// 更新
	public void update(Object obj) throws DBException {
		baseDAO.update(obj);
	}

	// 自动保存
	public void uporsave(Object obj) throws DBException {
		baseDAO.uporsave(obj);
	}

	// 批量保存
	@SuppressWarnings("unchecked")
	public boolean save(List list) throws DBException {
		return baseDAO.save(list);
	}

	// 批量更新
	@SuppressWarnings("unchecked")
	public boolean saveorupdate(List list) throws DBException {
		return baseDAO.saveorupdate(list);
	}

	// 根据主键取得唯一对象
	public Object findByID(String clazz, Long id) throws DBException {
		return baseDAO.findByID(clazz, id);
	}

	// 根据现有对象取得相同对象
	public List<Object> findByExample(Object obj) throws DBException {
		return baseDAO.findByExample(obj);
	}

	// 根据属性取得对象
	public List<Object> findByProperty(String clazz, String property,
			Object provalue) throws DBException {
		return baseDAO.findByProperty(clazz, property, provalue);
	}

	// 根据多属性组合取得对象
	public List<Object> findByComplex(String clazz, String[] property,
			Object[] value) throws DBException {
		return baseDAO.findByComplex(clazz, property, value);
	}

	// 取得所有对象
	public List<Object> findAll(String queryString) throws DBException {
		return baseDAO.findAll(queryString);
	}

	// 取得数据分页
	public PageInfo findAll(String queryString, int pageNo, int pageCount)
			throws DBException {
		return baseDAO.findAll(queryString, pageNo, pageCount);
	}

	// 取得数据记录数
	public int getCount(String queryString) throws DBException {
		return baseDAO.getCount(queryString);
	}

	// 取得request对象
	public HttpServletRequest getRequest() {
		return ServletActionContext.getRequest();
	}

	// 取得response对象
	public HttpServletResponse getResponse() {
		return ServletActionContext.getResponse();
	}

	// 取得session对象
	public HttpSession getSession() {
		return getRequest().getSession();
	}

	public BaseDAOI getBaseDAO() {
		return baseDAO;
	}

	public void setBaseDAO(BaseDAOI baseDAO) {
		this.baseDAO = baseDAO;
	}

}
